import os
import sys
import subprocess
import platform
import shutil

def check_dependencies():
    """检查并安装依赖"""
    print("正在检查依赖项...")
    
    # 检查并安装 cryptography
    try:
        import cryptography
        print(f"已安装 cryptography {cryptography.__version__}")
    except ImportError:
        print("缺少 cryptography 包，正在安装...")
        subprocess.check_call([sys.executable, "-m", "pip", "install", "cryptography==41.0.5"])
    
    # 安装其他所有依赖
    req_file = os.path.join(os.path.dirname(__file__), "requirements.txt")
    if os.path.exists(req_file):
        print("安装所有依赖...")
        subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", req_file])
    
    print("依赖检查完成！")

def check_mysql():
    """检查 MySQL 连接"""
    print("\n正在检查 MySQL 连接...")
    
    try:
        from test_mysql import test_mysql_connection
        if not test_mysql_connection():
            print("\nMySQL 连接失败！")
            print("请确保:")
            print("1. MySQL 服务正在运行")
            print("2. 使用的端口是 3307 (或在 .env 文件中更新)")
            print("3. 用户名是 root，密码是 123456 (或在 .env 文件中更新)")
            
            decision = input("\n是否继续设置？(y/n): ")
            if decision.lower() != 'y':
                sys.exit(1)
        else:
            print("MySQL 连接成功！")
    except ImportError as e:
        print(f"导入 test_mysql 模块失败: {e}")
        sys.exit(1)

def setup_env_file():
    """确保 .env 文件存在"""
    env_file = os.path.join(os.path.dirname(__file__), ".env")
    config_file = os.path.join(os.path.dirname(__file__), "config.env")
    
    if not os.path.exists(env_file) and os.path.exists(config_file):
        print("\n正在从 config.env 创建 .env 文件...")
        shutil.copy2(config_file, env_file)
        print(".env 文件创建成功！")

def init_database():
    """初始化数据库"""
    print("\n正在初始化数据库...")
    
    try:
        from setup_db import setup_database
        setup_database()
        print("数据库初始化成功！")
    except Exception as e:
        print(f"数据库初始化失败: {e}")
        decision = input("是否继续？(y/n): ")
        if decision.lower() != 'y':
            sys.exit(1)

def print_pycharm_instructions():
    """打印 PyCharm 配置说明"""
    print("\n" + "="*60)
    print("PyCharm 配置说明")
    print("="*60)
    print("\n1. 配置后端运行配置:")
    print("   - 点击顶部菜单 Run > Edit Configurations")
    print("   - 点击 + 按钮，选择 Python")
    print("   - 设置以下参数:")
    print("     - 名称: Backend")
    print(f"     - 脚本路径: {os.path.abspath('run.py')}")
    print(f"     - 工作目录: {os.path.abspath('.')}")
    print("     - Python 解释器: 选择项目的虚拟环境")
    print("   - 点击确定")
    
    print("\n2. 配置前端运行配置:")
    print("   - 点击 + 按钮，选择 npm")
    print("   - 设置以下参数:")
    print("     - 名称: Frontend")
    chat_app_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'chat-app'))
    print(f"     - package.json: {os.path.join(chat_app_dir, 'package.json')}")
    print("     - 命令: run")
    print("     - 脚本: dev")
    print("   - 点击确定")
    
    print("\n3. 创建复合配置:")
    print("   - 点击 + 按钮，选择 Compound")
    print("   - 设置名称: Full Stack")
    print("   - 勾选之前创建的 Backend 和 Frontend 配置")
    print("   - 点击确定")
    
    print("\n4. 启动应用:")
    print("   - 在配置下拉菜单中选择 Full Stack")
    print("   - 点击运行按钮 (绿色三角形)")
    print("\n" + "="*60)
    print("应用访问地址:")
    print("  前端: http://localhost:5173")
    print("  后端: http://localhost:5000")
    print("  测试账户: test / password123")
    print("="*60)

if __name__ == "__main__":
    print("="*60)
    print("多功能智能助手 - PyCharm 配置助手")
    print("="*60 + "\n")
    
    check_dependencies()
    setup_env_file()
    check_mysql()
    init_database()
    print_pycharm_instructions()
    
    print("\n设置完成！现在您可以在 PyCharm 中启动项目了。")
    
    if platform.system() == "Windows":
        input("\n按 Enter 键退出...") 